home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 7 / Gekikoh Dennoh Club Vol. 7 (Japan).7z / Gekikoh Dennoh Club Vol. 7 (Japan) (Track 01).bin / games / plinboot / plinboot.s < prev    next >
Text File  |  1999-06-15  |  5KB  |  232 lines

  1. ;----------------------------------------------------------------
  2. ;
  3. ;    『魔法のシュータープッチンプリン』ブートプログラム
  4. ;        PLINBOOT.X v1.00 (1999.05.31) by M.Kamada
  5. ;
  6. ;----------------------------------------------------------------
  7. ;
  8. ;    ・スコアを CD-ROM に書き込もうとして「書き込み不可能です」の
  9. ;     白帯が出るのを回避する。
  10. ;     この白帯のときだけ無条件にアボートが選択されたものとみなす。
  11. ;    (この白帯が出るのはmain()の最後なのでアボートして問題ない)
  12. ;
  13. ;    ・キーボードでの操作に対応する
  14. ;        ↑/8        上
  15. ;        ↓/2        下
  16. ;        ←/4        左
  17. ;        →/6        右
  18. ;        XF1/OPT.1    ボタンA(ボンバー)
  19. ;        XF2/OPT.2    ボタンB(ショット)
  20. ;
  21. ;    ・終了時にカーソルを表示する
  22. ;
  23. ;    ・終了時にキーバッファをクリアする
  24. ;
  25. ;----------------------------------------------------------------
  26.  
  27.     .include    doscall.mac
  28.     .include    iocscall.mac
  29.  
  30. debug    .macro    ch
  31.     move.l    d0,-(sp)
  32.     move.w    #ch,-(sp)
  33.     DOS    _PUTCHAR
  34.     addq.l    #2,sp
  35.     move.l    (sp)+,d0
  36.     .endm
  37.  
  38. ;----------------------------------------------------------------
  39. ;バージョン定義
  40. PROGNAME    reg    'PLINBOOT'
  41. LOWER_PROGNAME    reg    'plinboot'
  42. VERSION        reg    '1.00'
  43. DATE        reg    '1999.05.31'
  44.  
  45. ;----------------------------------------------------------------
  46. ;定数
  47. TRAP14_VECTOR        equ    $00B8
  48.  
  49. ;----------------------------------------------------------------
  50. ;実行開始位置
  51.     .text
  52. exec_entry:
  53.     lea.l    (16,a0),a0
  54.     suba.l    a0,a1
  55.     movem.l    a0-a1,-(sp)
  56.     DOS    _SETBLOCK
  57.     addq.l    #8,sp
  58.  
  59.     lea.l    stack_top,sp
  60.  
  61.     lea.l    execparam-8,a0
  62.     subq.l    #8,a2
  63.     moveq.l    #8+1-1,d0
  64. @@:    move.b    (a2)+,(a0)+
  65.     dbra    d0,@b
  66.     movea.l    a2,a1
  67.     bsr    strcpy
  68.  
  69.     lea.l    (filename,pc),a1
  70.     lea.l    execname,a0
  71.     bsr    strcpy
  72.  
  73.     clr.l    -(sp)
  74.     pea.l    execparam
  75.     pea.l    execname
  76.     move.w    #2,-(sp)
  77.     DOS    _EXEC
  78.     lea.l    (14,sp),sp
  79.     move.l    d0,d7
  80.     bmi    main_exit
  81.  
  82.     clr.l    -(sp)
  83.     pea.l    execparam
  84.     pea.l    execname
  85.     move.w    #1,-(sp)
  86.     DOS    _EXEC
  87.     lea.l    (14,sp),sp
  88.     move.l    d0,d7
  89.     bmi    main_exit
  90.  
  91.     pea.l    (joyget_routine,pc)
  92.     move.w    #$0100+_JOYGET,-(sp)
  93.     DOS    _INTVCS
  94.     move.l    d0,(2,sp)
  95.     move.l    d0,joyget_old_vector
  96.  
  97.     pea.l    (trap14_routine,pc)
  98.     move.w    #TRAP14_VECTOR>>2,-(sp)
  99.     DOS    _INTVCS
  100.     move.l    d0,(2,sp)
  101.     move.l    d0,trap14_old_vector
  102.  
  103.     move.l    d7,-(sp)
  104.     move.w    #4,-(sp)
  105.     DOS    _EXEC
  106.     addq.l    #6,sp
  107.     move.l    d0,d7
  108.  
  109.     DOS    _INTVCS
  110.     addq.l    #6,sp
  111.  
  112.     DOS    _INTVCS
  113.     addq.l    #6,sp
  114.  
  115.     IOCS    _B_CURON
  116.     IOCS    _OS_CURON
  117.  
  118.     bra    2f
  119. 1:    IOCS    _B_KEYINP
  120. 2:    IOCS    _B_KEYSNS
  121.     tst.l    d0
  122.     bne    1b
  123.  
  124.     clr.w    -(sp)
  125.     DOS    _KFLUSH
  126.     addq.l    #2,sp
  127.  
  128. main_exit:
  129.     move.w    d7,-(sp)
  130.     DOS    _EXIT2
  131.  
  132. filename:    .dc.b    'PLIN.X',0
  133.     .even
  134.  
  135.     .bss
  136.     .even
  137. trap14_old_vector:    .ds.l    1
  138. joyget_old_vector:    .ds.l    1
  139.     .even
  140.         .ds.l    2
  141. execparam:    .ds.b    1024
  142. execname:    .ds.b    256
  143.     .even
  144.         .ds.b    1024*64
  145. stack_top:
  146.  
  147. ;----------------------------------------------------------------
  148. ;TRAP#14例外処理ルーチン
  149. ;    「書き込み不可能です」のときだけ無条件に実行を中止する
  150.     .text
  151. trap14_routine:
  152.     cmp.w    #$700E,d7
  153.     beq    @f
  154.     move.l    trap14_old_vector,-(sp)
  155.     rts
  156.  
  157. @@:    IOCS    _ABORTRST
  158.     IOCS    _ABORTJOB
  159.     rte
  160.  
  161. ;----------------------------------------------------------------
  162. ;IOCS _JOYGET処理ルーチン
  163. ;    キーボードでの操作に対応する
  164. ;        ↑/8        上
  165. ;        ↓/2        下
  166. ;        ←/4        左
  167. ;        →/6        右
  168. ;        XF1/OPT.1    ボタンA(ボンバー)
  169. ;        XF2/OPT.2    ボタンB(ショット)
  170.     .text
  171. joyget_routine:
  172.     move.l    a0,-(sp)
  173.     movea.l    joyget_old_vector,a0
  174.     jsr    (a0)
  175.     move.w    d1,-(sp)
  176.     lea.l    $0807.w,a0
  177.     move.b    (a0)+,d1        ;$0807.w
  178.                     ;........|.DRUL...
  179.     and.w    #%00000000_01111000,d1    ;00000000|0DRUL000
  180.     and.b    (drul_lu,pc,d1.w),d0
  181.     move.w    (a0)+,d1        ;$0808.w,$0809.w
  182.                     ;4+987-*/|0E321=65
  183.                     ;L..U....|...D..R.
  184.     and.w    #%10010000_00010010,d1    ;L00U0000|000D00R0
  185.     add.w    #%00110000_00000110,d1    ;LU..0000|000DR..0
  186.     rol.w    #2,d1            ;..000000|0DR..0LU
  187.     and.w    #%00000000_01100011,d1    ;00000000|0DR000LU
  188.     and.b    (drul_lu,pc,d1.w),d0
  189.     move.b    $080E.w,d1        ;....BA..
  190.     lsl.b    #3,d1            ;.BA..000
  191.     or.b    (a0),d1            ;$080A.w
  192.                     ;.BA.....
  193.     and.b    #%01100000,d1        ;0BA00000
  194.     not.b    d1
  195.     and.b    d1,d0
  196.     move.w    (sp)+,d1
  197.     movea.l    (sp)+,a0
  198.     rts
  199.  
  200. drul_lu:
  201.   .irp _6,%11111111,%11111101
  202.     .irp _5,%11111111,%11110111
  203.       .irp _4,%11111111,%11111110
  204.         .irp _3,%11111111,%11111011
  205.           .rept 2
  206.             .irp _1,%11111111,%11111011
  207.               .irp _0,%11111111,%11111110
  208.     .dc.b    _0.and._1.and._3.and._4.and._5.and._6
  209.               .endm
  210.             .endm
  211.           .endm
  212.         .endm
  213.       .endm
  214.     .endm
  215.   .endm
  216.  
  217. ;----------------------------------------------------------------
  218. ;文字列をコピーする
  219. ;<a0.l:コピー先
  220. ;<a1.l:コピーする文字列
  221. ;>a0.l:コピー先の文字列の末尾の0の位置
  222. ;>a1.l:コピーした文字列の末尾の0の次の位置
  223.     .text
  224. strcpy::
  225. @@:    move.b    (a1)+,(a0)+
  226.     bne    @b
  227.     subq.l    #1,a0
  228.     rts
  229.  
  230. ;----------------------------------------------------------------
  231.     .end    exec_entry
  232.